Amazon EC2でCentOS6を使用するときのハマリポイント
森永です。
弊社はリモートワークが可能なので、私は休みを取らずに帰省し地元のゆめタウン内でこの記事を書いております。
テーマソングが頭に残るのでどうにかして欲しいです。
さて、先日CentOS6の公式AMI(Amazon公式ではなくCentOS公式)を使って構築を行いました。
その時ハマるポイントがいくつかあったので、まとめておきます。
CentOS7が出た今でも未だに6を使う案件が多いので役立つ方がいれば幸いです。
AMIの選択
MarketplaceでAMIを選択しようとした私に一つ目の関門が現れます。
CentOS6の公式AMIがなんだかいっぱい現れるのです。もうてんやわんやです。
どれを選ぶかはバージョンの要件などでまちまちなのですが、CentOS6をというだけであれば「CentOS 6 (x86_64) - with Updates HVM」をオススメします。
- CentOS 6.* (x86_64) - Release Media → マイナーバージョン指定ならこれです。PVしかない模様。
- CentOS 6 (x86_64) - with Updates → 最新版を使用可能だがPVなので旧インスタンスタイプしか選択できない。
- CentOS 6 (x86_64) - with Updates HVM → 最新版使用可能でHVM。オススメ
最初は「CentOS 6.5 (x86_64)」を選択して、t2系のインスタンスタイプが選べず焦りました。
cloud-init
user-dataを指定して、ミドルウェアやらをインストールしたい!そういう方も多いかと思います。
Amazon Linuxに慣れ親しんでしまうと当たり前になっていますが、こちらcloud-initがインストールされていることが前提なのです。
CentOS6にはcloud-initがインストールされていないので、当然user-dataも使用できません。 使いたい場合にはcloud-initをインストールしましょう。
# yum install cloud-init
デフォルトユーザ
現在(2018/04/12)はデフォルトユーザは「centos」になっています。
無事関門を乗り越え、インスタンスが立ち上がったのでSSHへログインしようとしました。
$ ssh -i .ssh/hogehoge.pem ec2-user@xx.xx.xx.xx ec2-user@xx.xx.xx.xx's password:
おや?パスフレーズなしの公開鍵のはずなのに何故かパスワードを聞かれます。
実はCentOS6のデフォルトユーザはroot
なのです!
$ ssh -i .ssh/cm-morinaga.pem root@xx.xx.xx.xx [root@ip-10-0-0-0 ~]#
root
でログインするとログインすることが出来ました。
ただ、ちょっとroot
ログインは怖いので別ユーザを作成しておいたほうが良さそうです。
割り当てディスク
無事root
ユーザでSSHログイン出来たので、すかさずディスク容量を確認します。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.9G 797M 6.7G 11% / tmpfs 498M 0 498M 0% /dev/shm
おんやぁ?EBSボリュームを10GBも割り当てたのに8GBしか認識していないようです。
CentOS6にはcloud-initやdracut-modules-growrootがインストールされていない事が原因です。
このままだとどんなに割り当ててもデフォルトの8GBしか使用できません。
こちらを参考にパーテーションを本来のサイズへ拡張しましょう。
resize2fs
だけではうまくいかないので注意が必要です。
SELinux / iptables
ディスクの拡張も終わり、ミドルをインストールしました。
よーし、疎通確認するぞー、と意気込んでみたもののHTTPすら通りません。
セキュリティグループにもNetworkACLにも問題はなさそうです。 おもむろに以下のコマンドを実行してみました。
# getenforce Enforcing # service iptables status Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
そう、SELinuxとiptablesが生きているのです。
SELinuxは停止することに賛否両論あるかと思いますが、セキュリティグループがある今、iptablesも使うと2重管理で大変なことになるのは目に見えています。 (もちろん細かい設定をしたいときにお世話になることはあるかと思います。)
今までありがとう、と感謝の念を込めながら停止しましょう。
(SELinuxについての判断は現場次第です。)
# setenforce 0 # vi /etc/selinux/config ~ SELINUX=disabled ~ # service iptables stop # chkconfig iptables off
AWS CLI
Amazon Linuxばかり使っている私は、おもむろにAWS CLIのコマンドを使い出します。
Tab補完が効かない時点で気づくべきだったのですが。。。
# aws ec2 describe-instances -bash: aws: コマンドが見つかりません
AWS CLIはデフォルトでは入っていないのです!天地がひっくり返る衝撃!
というほどではないですが、踏み台サーバあたりにはインストールしておきたいところです。
pipのインストールもされていないのでそこからです。
# easy_install pip ~ # pip install awscli ~ # type aws_completer aws_completer is /usr/bin/aws_completer # complete -C '/usr/bin/aws_completer' aws # echo "complete -C '/usr/bin/aws_completer' aws" >> $HOME/.bashrc
これで補完まで出来るようになりました。(bashの場合)
NTP
サーバでは正確な時刻というのが非常に重要です。
こちらもAmazon LinuxではNTPが最初から設定されているので忘れがちです。
# ntpq -p -bash: ntpq: コマンドが見つかりません
CentOS6のデフォルトではntpdがインストールされていません。 インストールして、お好きなNTPサーバを設定しましょう。
# yum install ntp ~ # vi /etc/ntp.conf ~ server <お好きなNTPサーバ1> server <お好きなNTPサーバ2> ~ # service ntpd start Starting ntpd: [ OK ] # chkconfig ntpd on # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +s97.GchibaFL4.v 133.243.238.244 2 u 38 64 1 6.468 -0.459 0.227 *x.ns.gin.ntt.ne 103.1.106.69 2 u 40 64 1 9.504 3.962 0.185 chobi.paina.jp .STEP. 16 u - 64 0 0.000 0.000 0.000 +108.61.223.189. 103.1.106.69 2 u 38 64 1 4.052 -0.863 0.145
出来ました!
最後に
CentOS7への移行が進み、CentOS6を使うことがなくなってきたかと思いますが、未だに使われ続けているという印象です。
先人の残した知恵で何とか乗り切ることが出来ました。御礼申し上げます。